package 类加载器.类的初始化阶段;

import org.junit.Test;

import java.util.Random;

/**
 * <P> @Author: ideaAdmin
 * <P> TODO: Class
 * <P>TODO: 3. 引用常量不会触发此类或接口的初始化。因为常量在链接阶段就已经被显式赋值了。
 * <P>TODO: 4. 调用ClassLoader类的loadClass()方法加载一个类，并不是对类的主动使用，不会导致类的初始化。
 * <P> Date: 2022/3/28:22:23
 * <P> Description:
 */

public class PassiveUse2 {
    @Test
    public void test1(){
        //System.out.println(Person.NUM);
        System.out.println(Person.NUM1);
    }
    @Test
    public void test2(){
        //System.out.println(SerialA.ID);
        System.out.println(SerialA.ID1);
    }

    @Test
    public void test3(){
        try {
            Class<?> aClass = ClassLoader.getSystemClassLoader().loadClass("类加载器.类的初始化阶段.SerialA");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

}

class Person{
    static {
        System.out.println("Person.static initializer");
    }
    public static final int NUM = 1;//链接的准备阶段就被赋好值了
    public static final int NUM1 = new Random().nextInt(10);;//链接的准备阶段就被赋好值了
}

interface SerialA{
    public static final Thread t = new Thread(){
        {
            System.out.println("SerialA initializer");
        }
    };
    int ID = 1;
    int ID1 = new Random().nextInt(10);
}


